<?php

/**
 * Reclamo form.
 *
 * @package    reclamos
 * @subpackage form
 * @author     Your name here
 */
class ReclamoForm extends BaseReclamoForm
{
  public function configure()
  {
    sfContext::getInstance()->getConfiguration()->loadHelpers(array('I18N'));
    $this->configureWidgets();
    $this->configureValidators();
    $this->unsetFields();
  }

  public function configureWidgets()
  {
    parent::configureWidgets();
    $w_tipo = new sfWidgetFormPropelChoice(array('model' => 'Sucursal', 'add_empty' => true, 'renderer_class' => 'mbWidgetFormChosenChoice'));

    $this->widgetSchema["sucursal_id"] = new dcWidgetFormAjaxDependencePropel(array(
        'related_column' => DistribuidorPeer::ID,
        "dependant_widget" => $w_tipo,
        "observe_event" => 'foo:ownchange',
        "observe_widget_id" => "reclamo_distribuidor_id",
        "get_observed_value_callback" => array(get_class($this), "updateSucursal"),
        'message_with_no_value' => 'Seleccione una distribuidora para actualizar los valores'
      ));

    $this->widgetSchema["sf_guard_user_id"] = new sfWidgetFormPropelChoice(array('model' => 'sfGuardUser', 'add_empty' => false, 'method' => 'getFullname'));
    $this->getWidget('sf_guard_user_id')->setOption('renderer_class', 'mbWidgetFormChosenChoice');

    $this->setWidget('cliente_id', new pmWidgetFormPropelJQuerySearch(array('model' => 'Cliente',
        'column' => array('nombre', 'numero_cliente', 'dni'),
        'selected_label' => 'Busque por N° de suministro, DNI o nombre',
        'search_label' => 'Buscar')));

    $this->setWidget('asunto_id', new mtWidgetFormPlain(array(
        'object' => $this->getObject()->getAsunto(),
        'use_retrieved_value' => false,
        'add_hidden_input' => true
      )));

    $this->setWidget('tipo_atencion_id', new mtWidgetFormPlain(array(
        'object' => $this->getObject()->getTipoAtencion(),
        'use_retrieved_value' => false,
        'add_hidden_input' => true
      )));

    $this->setWidget('sf_guard_user_id', new mtWidgetFormPlain(array(
        'object' => $this->getObject()->getsfGuardUser(),
        'method' => 'getFullname',
        'use_retrieved_value' => false,
        'add_hidden_input' => true
      )));

    $this->setWidget('estado', new dcWidgetFormReferenceModelChoice(array(
        'model' => 'Estado0800',
        'add_empty' => false
      )));

    $this->getWidget("estado")->setOption('renderer_class', 'mbWidgetFormChosenChoice');

    $w_subtema = new sfWidgetFormPropelChoice(array('model' => 'Subtema', 'add_empty' => false, 'renderer_class' => 'mbWidgetFormChosenChoice'));

    $this->widgetSchema['subtema_id'] = new dcWidgetFormAjaxDependencePropel(array(
        'related_column' => TemaPeer::ID,
        "dependant_widget" => $w_subtema,
        "observe_event" => 'foo:ownchange',
        "observe_widget_id" => "reclamo_tema_id",
        "get_observed_value_callback" => array(get_class($this), "updateSubtema"),
        'message_with_no_value' => 'Seleccione una tema para  actualizar los valores'
      ));
    
     $this->widgetSchema->setLabel('cliente_id', 'Usuario');

  }

  public function configureValidators()
  {
    parent::configureValidators();
    $this->validatorSchema->setOption('allow_extra_fields', true);
    // TODO validator de cliente
    $this->setValidator('asunto_id', new sfValidatorPass());
    $this->setValidator('tipo_atencion_id', new sfValidatorPass());
    $this->setValidator('sf_guard_user_id', new sfValidatorPass());
    $this->setValidator('estado', new dcValidatorReferenceModelChoice(array(
        'model' => 'Estado0800'
      )));

  }

  public static function updateSucursal($widget, $values, $criteria)
  {
    $c = new Criteria();
    $c->add(SucursalPeer::DISTRIBUIDOR_ID, $values);
    $widget->setOption('criteria', $c);
  }

  public static function updateSubtema($widget, $values, $criteria)
  {
    $c = new Criteria();
    $c->add(SubtemaPeer::TEMA_ID, $values);
    $widget->setOption('criteria', $c);
  }

  public function unsetFields()
  {
    $this->useFields(array("nro_reclamo",
      "nro_expediente",
      "legajo_cau",
      "cliente_id",
      "distribuidor_id",
      "sucursal_id",
      "omic",
      "tema_id",
      "fecha_ingreso_oceba",
      "fecha_recepcion_gerencia",
      "sf_guard_user_id",
      'translado_distribuidor',
      'fecha_translado_distribuidor',
      'fecha_recepcion_distribuidor',
      'translado_delegacion',
      'fecha_translado_delegacion',
      'fecha_recepcion_distribuidor'
    ));
  }
  public function validarPendiente($validator, $values){
    $error_estado = new sfValidatorError($validator, 'Si el estado es pendiente este campo es obligatiorio.');
    #$error_primer_instancia = new sfValidatorError($validator, 'Si es primer instancia debe completar el numero de reclamo');
#AHORA RESULTA QUE NADA ES REQUERIDO.......
//    if ($values['estado'] == 1){
//      if ($values['horario_contacto'] == ""){
//            throw new sfValidatorErrorSchema($validator, array('horario_contacto' => $error_estado));
//      }
//      if (($values['telefono_contacto'] == "" && !$values['email_contacto'] == "") || ($values['telefono_contacto'] == "" && $values['email_contacto'] == "")){
//            throw new sfValidatorErrorSchema($validator, array('telefono_contacto' => $error_estado, 'email_contacto'=> $error_estado));
//      }
//
//    }
    return $values;
  }
}
